package com.wjw.java.others.object_;

/**
 *  Object类的finalize():实际开发中,几乎不会使用
 *
 *  1.当对象被回收时,系统自动调用该对象的finalize(),子类可以重写该方法,做一些释放资源的操作
 *  2.什么时候被回收:当某个对象没有任何引用时,则JVM认为该对象是一个垃圾对象,就会使用垃圾回收机制
 *  来销毁该对象,在销毁该对象之前,会先调用finalize()
 *  3.垃圾回收机制的调用,使用系统决定的(即有自己的GC算法),也可以通过System.gc()主动触发垃圾回收
 */
public class Finalize_ {
    public static void main(String[] args) {
        Car bmw = new Car("宝马X6");
        bmw = null;//此时,堆中的Car对象没有任何引用,则会被JVM认为是垃圾对象,会调用finalize()
        System.gc();//主动触发垃圾回收
        System.out.println("程序运行结束...");
    }
}
class Car{
    private String name;

    /**
     * 重写Object类的finalize方法,释放资源
     */
    @Override
    protected void finalize() throws Throwable {
        //super.finalize();
        System.out.println("我们销毁了汽车："+this.name);
        System.out.println("正在释放某些资源...");
    }

    //getter、setter...
    public String getName() {
        return this.name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Car() {
    }
    public Car(String name) {
        this.name = name;
    }
}